/**
 *  endFunction: 换行参数，返回boolean型
 * */
export function parseTwoDimensionalArray<T>(list:T[],maxCol:number,endFunction?:(item:T,index:number)=>boolean):Array<T[]>{
    let lst:Array<T[]>=[]
    let tmp:Array<T>=[]
    let num=0
    list.forEach((item,index)=>{
        tmp.push(item)
        num++
        if( endFunction?.(item,index) || num % maxCol === 0 || index === list.length-1){
            lst.push(tmp)
            num=0
            tmp=[]
        }
    })
    return lst
}

/**
 * 二维数组索引转换成一维数组索引
 * 参数：行索引，列索引，一维数组
 */

export function getOneDimensionalIndex(rowIndex:number,colIndex:number,arr:Array<any>):number{
    let index=0
    for(let i=0;i<rowIndex;i++){
        index+=arr[i].length
    }
    for(let i=0;i<colIndex;i++){
        index++
    }
    return index
}

/**
 * 一维数组索引转换成二维数组索引
 * 参数：一维数组索引，二维数组
 */

export function getTwoDimensionalIndex(oneDimensionalIndex:number,arr:Array<Array<any>>):{
    rowIndex:number
    colIndex:number
}{
    let rowIndex=-1
    let colIndex=-1
    let n=oneDimensionalIndex+1;
    for(const row in arr){
        const len = row.length
        // 如果行长小于剩余个数，说明不是此行
        if(len < n){
            rowIndex++
            n-=len
        }else{
            // 是此行
            colIndex=n-1
        }
    }
    
    return {
        rowIndex,
        colIndex
    }
}